package com.zz.inventory.mapper;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.zz.inventory.domain.FranchiseBills;
import org.apache.ibatis.annotations.Param;

/**
 * 账单Mapper接口
 * 
 * @author zz
 * @date 2025-07-03
 */
public interface FranchiseBillsMapper 
{
    /**
     * 查询账单
     * 
     * @param billId 账单主键
     * @return 账单
     */
    public FranchiseBills selectFranchiseBillsByBillId(Long billId);

    /**
     * 查询账单列表
     * 
     * @param franchiseBills 账单
     * @return 账单集合
     */
    public List<FranchiseBills> selectFranchiseBillsList(FranchiseBills franchiseBills);

    /**
     * 新增账单
     * 
     * @param franchiseBills 账单
     * @return 结果
     */
    public int insertFranchiseBills(FranchiseBills franchiseBills);

    /**
     * 修改账单
     * 
     * @param franchiseBills 账单
     * @return 结果
     */
    public int updateFranchiseBills(FranchiseBills franchiseBills);

    /**
     * 删除账单
     * 
     * @param billId 账单主键
     * @return 结果
     */
    public int deleteFranchiseBillsByBillId(Long billId);

    /**
     * 批量删除账单
     * 
     * @param billIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteFranchiseBillsByBillIds(Long[] billIds);

    FranchiseBills selectFranchise(String billNo);     //支付宝 查询订单信息

    void updateFran(FranchiseBills orders);       //支付宝 更新订单信息


    /**
     * 统计账单数量
     */
    int countBills(@Param("startDate") String startDate,
                   @Param("endDate") String endDate,
                   @Param("status") String status);

    /**
     * 统计账单金额总和
     */
    BigDecimal sumAmount(@Param("startDate") String startDate,
                         @Param("endDate") String endDate,
                         @Param("status") String status);

    /**
     * 查询月度收入趋势数据
     */
    List<Map<String, Object>> selectMonthlyAmountTrend(@Param("startDate") String startDate,
                                                       @Param("endDate") String endDate,
                                                       @Param("status") String status);

    /**
     * 查询账单状态分布数据
     */
    List<Map<String, Object>> selectBillStatusDistribution(@Param("startDate") String startDate,
                                                           @Param("endDate") String endDate);

    /**
     * 查询套餐销售排行数据
     */
    List<Map<String, Object>> selectPackageRanking(@Param("startDate") String startDate,
                                                   @Param("endDate") String endDate);

    /**
     * 查询学校消费排行数据
     */
    List<Map<String, Object>> selectSchoolConsumptionRanking(@Param("startDate") String startDate,
                                                             @Param("endDate") String endDate);
}
